\clearemptydoublepages
\chapter{Projet}
\paragraph{}
Dans ce chapitre, nous verrons la planification générale, créée au début du
projet, après quoi nous verrons qu'elles ont été les principales diffictultés ainsi que des idées
d'ajouts au projet.

\section{Planification générale}
\paragraph{}
La première partie consistait notamment à lire et à comprendre pourquoi le noyau
Linux n'est pas temps réel.
Ensuite, il a fallu étudier les différentes distributions (et
extensions) existantes temps réel afin de les comparer sur papier. 
Pour effectuer cette
comparaison, la documentation des auteurs a été utilisée. En outre, afin
d'obtenir un avis plus neutre, la recherche a été étendue à des sites web et des
forums spécialisés traitant le sujet.\\
Les solutions open-source allait toutes dans le sens d'un co-noyau à Linux. Après avoir trouvé
plusieurs solutions de co-noyau, le
premier choix s'est porté sur RTAI, avec lequel des problèmes de compilation
ont eu lieu. Ce dernier ne permettait que de patcher un noyau Linux d'une version
datant d'environ 2 ans ce qui m'a poussé à changer de direction lorsque j'ai
découvert Xenomai. En addition, Xenomai offre la possibilité de migrer les tâche de Linux à Xenomai
et fait partie des système temps réel strict.
\paragraph{}
Un système de co-noyau est une architecture compliquée et de ce fait très intéressante. C'est
pourquoi les premiers mois ont été consacrés uniquement à comprendre le fonctionnement de
Xenomai et d'ADEOS et à chercher de la documentation à leurs sujets malgré sa rareté.

\paragraph{}
Après avoir trouvé la solution appropriée, l'étude du noyau de Xenomai a pu commencé. Sa
compréhension a été un tâche très fastidieuse. Effectivement, un tel noyau a nécessité des
années de conception et comprend des centaines de fichier sources (~1500 pour Xenomai). C'est
pourquoi trouver la fonction d'ordonnancement, les files, les fonctions et les éléments nécessaires
nécessite énormément de temps.

\paragraph{}
Une fois cette étude terminée, il a fallu étudier les algorithmes de réduction d'énergie
existants pour
comprendre leur fonctionnement et surtout de quelle manière ils permettent d'effectuer une économie.
Mais aussi comprendre comment fonctionne les systèmes temps réel et leurs
algorithmes.
\paragraph{}
La dernière grande étape a été d'implémenter l'algorithme en réfléchissant à tous les cas pouvant
survenir. Puis le changement de fréquence du processeur qui  devait être effectué rapidement
(première demande à VIA au début du projet) puisqu'il devait s'agir d'une simple adaptation du code
fourni par
VIA. Malheureusement ces derniers n'ayant collaboré cette partie a nécessité 3 jours entier de
travail qui n'étaient pas planifiés.
\paragraph{}
Finalement des tests afin de vérifier le bon fonctionnement d'OTE ont été effectués.\\

Ci-dessous le digramme de Gantt de la planification :
\begin{figure}[h!]
 \centering
 \includegraphics[scale=0.33]{../Imgs/Planification.png}
 % Planification.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
 \caption{diagramme de Gantt de la planification}
\end{figure}
\FloatBarrier

Puis une vue numérique des temps alloués aux tâches et de leur état
d'avancement :
\begin{figure}[h!]
 \centering
 \includegraphics[scale=0.49]{../Imgs/TachesEtAvancement.png}
 % TachesEtAvancement.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
 \caption{Tâches et état d'avancement}
\end{figure}
\FloatBarrier

\section{Problèmes rencontrés}
\label{ProblemesRencontre}
\paragraph{}
Le problème majeur actuel est la modification de la fréquence et la tension du
processeur VIA, pour laquelle il est nécessaire d'obtenir le datasheet du constructeur,
indiquant quelle tension doit être appliquée à quelle fréquence. Soit pour ce processeur les ratios
et leurs numéros de tensions correspondantes.
\paragraph{}
Malheureusement, à ce jour, le constructeur n'a toujours pas répondu à la
dernière requête émise alors que la requête précédente avait été refusée. Par
ailleurs, après plusieurs recherches sur Internet, aucun distributeur suisse ne
semble exister. Les instructions fournies par le vendeur ne sont pas complètes. Nous avons déjà
recontacté ce dernier et espérons obtenir une réponse afin d'implémenter correctement le changement
de fréquence.
\paragraph{}
Toutefois, la partie changement de fréquence n'était de loin pas le but principal du projet. En
effet, le projet est fonctionnel et la partie hardware n'est qu'une adaptation. Cette partie
devrait d'ailleurs être complétée en créant une bibliothèque permettant de changer la fréquence de
plusieurs types de processeurs. À ce jour la fonction permettant d'effectuer le changement de
fréquence se trouve ainsi directement dans le fichier d'ordonnancement alors que ce n'est
clairement pas sa place. Ceci en attendant l'éventuel développement d'une bibliothèque dédiée.
\paragraph{}
Du côté de la documentation, il a été difficile de trouver des articles
assez exhaustifs et assez claires afin de permettre la bonne compréhension du
fonctionnement de Xenomai et d'Adeos. En outre, il n'existe, à ma connaissance, aucune documentation
ou livre sur
l'implémentation du code de ce système. Les documentations disponibles sont
celles fournies sur le site du projet telles que l'API et autres documentations
basiques. D'autre part, les commentaires dans le noyau sont rares et le code n'est pas
très explicite. Ce qui, d'ailleurs, est souvent le cas dans les noyaux où les
développeurs ont souvent une grande expérience et ne voient pas l'utilité directe
de commenter chaque partie de code.
\paragraph{}
La compilations du noyau prend entre 10 à 15 min. Il faut donc économiser au
maximum le nombre de tests effectués ou tous les prévoir en avance, ce qui ne
facilite pas le développement. Effectivement, en une journée le nombre de tests effectués était
compris entre 10 et 20 (en comptant le temps de comparaison des résultats etc). La recherche est
donc très longue. Sans compter qu'une compilation complète lors de changement d'options du noyau
prend entre 3h et 4h de temps.
\paragraph{}
La navigation dans le code est fastidieuse, Xenomai comportant beaucoup de
fichiers et énormément de fonctions. De surcroit, la navigation est rendue
difficile par les nombreuses conditions \textit{ifdef} pour le préprocesseur. Ces
conditions servent à sélectionner des parties de codes selon l'option choisie
dans le menuconfig à la compilation. En effet, il est arrivé plusieurs fois que
la même variable soit déclarée 2 ou 3 fois entre plusieurs \textit{ifdef}. Ces conditions
se trouvant souvent plusieurs dizaines de lignes avant et sont, par ce fait,
non-visibles au moment de la modification.
\paragraph{}
Finalement, il n'est pas possible d'utiliser un débogueur dans ce noyau. Même si
les développeurs de Xenomai ont sorti un patch pour déboguer ce dernier via
kgdb, le débogueur open-source du noyau Linux, ce débogueur ne fonctionne qu'avec
une version ancienne du noyau Linux.\\
En effet, kgdb,  n'est lui-même plus maintenu pour les versions récentes du
noyau Linux  \cite{SiteKgdb:website}. Sa dernière version est pour le noyau
Linux 2.6.15.5 alors que nous utilisons, dans ce projet, la version 2.6.28.7. 

\section{Ajouts possibles}
\paragraph{}
Il est important que le projet puisse, comme Linux et Xenomai être utilisé sur plusieurs types de
plateformes. Il serait donc presque nécessaire de créer une librairie permettant de changer la
fréquence des processeurs supportés par Linux en remodelant par exemple la libririe Linux existante
pour fontionner avec Xenomai.

\paragraph{}
Ce projet ayant été développé sur et pour un ordinateur monocoeur, il n'a pu être testé sur un
ordinateur multicoeur. Il serait toutefois intéressant de le faire. Même si aucune raison n'indique
que le projet ne fonctionne pas sur du multicoeur car aucune référence directe n'a été faite au CPU.

\paragraph{}
D'autres algorithmes d'ordonnancement, permettant d'économiser de l'énergie, pourraient être
essayés. Effectivement, puisque les éléments nécessaires sont en place, l'ajout d'un nouvel
algorithme serait nettement accéléré.

\paragraph{}
Une fois la librairie des CPU crée, il serait possible de faire une proposition d'intégrations du
projet aux développeurs de Xenomai afin de ne pas avoir besoin de sortir un nouveau patch du projet
à chaque
nouvelle version de Xenomai.



